/* 
 * File:   StaticObject.cpp
 * Author: Piotrek
 * 
 * Created on 12 czerwiec 2010, 14:54
 */
#include "stdafx.h"
#include "StaticObject.h"
//#include "GL/glfw.h"
#include "CollisionDetection.h"

extern unsigned int selectedModule;

/// @todo przeniesc enableModuleEditing
bool enableModuleEditing=false;

StaticObject::StaticObject() {}

StaticObject::StaticObject(char * name)
{
        unsigned int i;
        char plik[80];
        const float X = -1400,
                    Y = 2200,
                    Z = 100;
        for (i=0;i<11;i++)              // RAMA STOŁU
        {
            sprintf(plik,"%s/%05i.stl",name,i);
            modules.push_back(Module(plik));

            /*
             * tutaj moduly sa niezalezne od siebie wiec kazdy pojedynczy modul musimy transformowac
             * w oparciu o stale wspolrzedne i macierz jednostkowa (I)
             */
            modules[modules.size() - 1].transform(X,Y,Z,'x',90,I,1);
        }

        for (i=15;i<31;i++)     // RAMA DÓŁ + PODKLADKI
        {
            sprintf(plik,"%s/%05i.stl",name,i);
            modules.push_back(Module(plik));

            /*
             * tutaj moduly sa niezalezne od siebie wiec kazdy pojedynczy modul musimy transformowac
             * w oparciu o stale wspolrzedne i macierz jednostkowa (I)
             */
            modules[modules.size() - 1].transform(X,Y,Z,'x',90,I,1);
        }
        for (i=45;i<49;i++)     // TRZY PŁYTY DOOKOŁA
        {
            sprintf(plik,"%s/%05i.stl",name,i);
            modules.push_back(Module(plik));

            /*
             * tutaj moduly sa niezalezne od siebie wiec kazdy pojedynczy modul musimy transformowac
             * w oparciu o stale wspolrzedne i macierz jednostkowa (I)
             */
            modules[modules.size() - 1].transform(X,Y,Z,'x',90,I,1);
        }
        for (i=129;i<296;i+=6)       // ROLECZKI
        {
            sprintf(plik,"%s/%05i.stl",name,i);
            modules.push_back(Module(plik));

            /*
             * tutaj moduly sa niezalezne od siebie wiec kazdy pojedynczy modul musimy transformowac
             * w oparciu o stale wspolrzedne i macierz jednostkowa (I)
             */
            modules[modules.size() - 1].transform(X,Y,Z,'x',90,I,1);
        }
        for (i=296;i<307;i++)       // RAMA GÓRNA
        {
            sprintf(plik,"%s/%05i.stl",name,i);
            modules.push_back(Module(plik));

            /*
             * tutaj moduly sa niezalezne od siebie wiec kazdy pojedynczy modul musimy transformowac
             * w oparciu o stale wspolrzedne i macierz jednostkowa (I)
             */
            modules[modules.size() - 1].transform(X,Y,Z,'x',90,I,1);
        }

        InitializeCollisionDetectionModel();

        for (i=0;i<modules.size();i++)
        {
            this->UpdateCollisionDetectionModel(i);
        }
        

}

void StaticObject::draw(float R, float G, float B)
{
    unsigned int i;

    #ifdef LIGHT1
    float color[3];
    #endif

    for (i=0;i<modules.size();i++)
    {
        if (enableModuleEditing && selectedModule==i)
        {
            #ifdef LIGHT1
            color[0]=0.0f; color[1]=1.0f; color[2]=0.0f;
            glMaterialfv(GL_FRONT, GL_AMBIENT, color);
            #else
            glColor3f(0.0f,1.0f,0.0f);
            #endif
        }
        else if (collidedModule==(int)i)
        {
            #ifdef LIGHT1
            color[0]=1-R; color[1]=1-G; color[2]=1-B;
            glMaterialfv(GL_FRONT, GL_AMBIENT, color);
            #else
            glColor3f(1-R,1-G,1-B);
            #endif
        }
        else
        {
            #ifdef LIGHT1
            color[0]=R; color[1]=G; color[2]=B;
            glMaterialfv(GL_FRONT, GL_AMBIENT, color);
            #else
            glColor3f(R,G,B);
            #endif
        }

        modules[i].drawModule();

    }
}
